/**
 * @description  useReLaunch 关闭所有页面，打开到应用内的某个页面
 * @param {string} url 跳转路径
 * @param {object} query 路由参数
 * @example useReLaunch("/pages/index/index", { id: 1 });
 * @author 花东红
 * @time 2025/7/26
 */
export const useReLaunch = (url: string, query?: Record<string, any>) => {
  if (query && Object.prototype.toString.call(query) !== "[object Object]") return;
  if (!query || !Object.keys(query).length) return uni.reLaunch({ url });
  uni.reLaunch({ url: `${url}?data=${encodeURIComponent(JSON.stringify(query))}` });
};

/**
 * @description  useRedirectTo 关闭当前页面，跳转到应用内的某个页面
 * @param {string} url 跳转路径
 * @param {object} query 路由参数
 * @example useRedirectTo("/pages/index/index", { id: 1 });
 * @author 花东红
 * @time 2025/7/26
 */
export const useRedirectTo = (url: string, query?: Record<string, any>) => {
  if (query && Object.prototype.toString.call(query) !== "[object Object]") return;
  if (!query || !Object.keys(query)) return uni.redirectTo({ url }).catch(() => {});
  uni.redirectTo({ url: `${url}?data=${encodeURIComponent(JSON.stringify(query))}` }).catch(() => {});
};

/**
 * @description  useNavigateTo 保留当前页面栈历史，跳转到应用内的某个页面
 * @param {string} url 跳转路径
 * @param {object} query 路由参数
 * @example useNavigateTo("/pages/index/index", { id: 1 });
 * @author 花东红
 * @time 2025/7/26
 */
export const useNavigateTo = (url: string, query?: Record<string, any>) => {
  if (query && Object.prototype.toString.call(query) !== "[object Object]") return;
  if (!query || !Object.keys(query).length) return uni.navigateTo({ url }).catch(() => {});
  uni.navigateTo({ url: `${url}?data=${encodeURIComponent(JSON.stringify(query))}` }).catch(() => {});
};

/**
 * @description  useSwitchTab 跳转到tabBar页面，并关闭其他所有非tabBar页面
 * @param {string} url 跳转路径
 * @param {object} query 路由参数
 * @example useSwitchTab("/pages/index/index", { id: 1 });
 * @author 花东红
 * @time 2025/7/26
 */
export const useSwitchTab = (url: string, query?: Record<string, any>) => {
  if (query && Object.prototype.toString.call(query) !== "[object Object]") return;
  if (!query || !Object.keys(query).length) return uni.switchTab({ url });
  uni.switchTab({ url: `${url}?data=${encodeURIComponent(JSON.stringify(query))}` });
};

/**
 * @description  useReLaunchTabBar 全局跳转到首页指定某个tabBar页面(非自定义tabBar时无效)
 * @param {string | number} tabBarSelectedValue 底部tabBar索引值，默认为0 (从左到右排序，例如：0代表首页，1代表分类，2代表购物车，3代表个人中心)
 * @author 花东红
 * @time 2025/7/26
 */
export const useReLaunchTabBar = (tabBarSelectedValue: string | number) => {
  uni.reLaunch({ url: `/pages/index/index?tabBarSelectedValue=${tabBarSelectedValue}` });
};

/**
 * @description  useRedirectTabBar 全局跳转到首页指定某个tabBar页面(非自定义tabBar时无效)
 * @param {string | number} tabBarSelectedValue 底部tabBar索引值，默认为0 (从左到右排序，例如：0代表首页，1代表分类，2代表购物车，3代表个人中心)
 * @author 花东红
 * @time 2025/7/26
 */
export const useRedirectTabBar = (tabBarSelectedValue: string | number) => {
  uni.redirectTo({ url: `/pages/index/index?tabBarSelectedValue=${tabBarSelectedValue}` }).catch(() => {});
};

/**
 * @description  useNavigateQueryParser 解析路由参数（在onLoad钩子中调用传入onLoad形参）
 * @param {object} query 路由参数，传入onLoad形参
 * @param {string} key 指定解析的键名称
 * @example onLoad((e) => { const routerQuery = useNavigateQueryParser(e) })
 * @author 花东红
 * @time 2025/7/26
 */
export const useNavigateQueryParser = (query: Record<string, any>, key?: string) => {
  if (!Object.keys(query).length) return {};
  return JSON.parse(decodeURIComponent(query[key ?? "data"]));
};
